package com.uex.dev.manage.admin.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.yulichang.base.MPJBaseService;
import com.uex.dev.manage.admin.po.DevicePO;
import com.uex.dev.manage.admin.vo.device.*;
import com.uex.dev.manage.common.base.PageResult;
import jakarta.servlet.http.HttpServletResponse;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author wangchao
 * @since 2024-02-22
 */
public interface IDeviceService extends MPJBaseService<DevicePO> {

    /**
     * 设备替换唯一标识
     * @param req
     * @return
     */
    Boolean replaceToken(ReplaceTokenReq req);

    /**
     * 修改设备基本信息
     * @param deviceUpdateReq
     * @return
     */
//    Boolean updateDevice(DeviceUpdateReq deviceUpdateReq);

    /**
     * 获取设备列表
     * @param devicePageReq
     * @return
     */
    PageResult<DevicePageResp> pageDevice(DevicePageReq devicePageReq);

    /**
     * 获取设备基本信息
     * @param deviceToken
     * @return
     */
    DeviceInfoResp getInfoDevice(String deviceToken);

    /**
     * 修改设备基本信息
     * @param deviceUpdateInfoReq
     */
    void updateInfoDevice(DevicePO deviceUpdateInfoReq);

    /**
     * 获取项目对应设备列表
     * @param prjId
     * @return
     */
    List<DevicePageResp> getDeviceList(Integer prjId);

    /**
     * 导出设备能力
     * @param deviceToken
     */
    void exportDevice(String deviceToken, HttpServletResponse response);

    /**
     * 上传收单机信息
     * @param addRobotReq
     * @return
     */
//    Boolean addRobot(RobotInfo addRobotReq);

    /**
     * 上传扫描仪信息
     * @param addScannerReq
     * @return
     */
//    Boolean addScanner(RobotInfo addScannerReq);

    /**
     * 上传云盾信息
     * @param addUhubReq
     * @return
     */
//    Boolean addUhub(AddUhubReq addUhubReq);

    /**
     * 获取device
     * @param devToken
     * @return
     */
    default DevicePO getDeviceByDevToken(String devToken) {
        LambdaQueryWrapper<DevicePO> wrapper = Wrappers.<DevicePO>lambdaQuery()
                .eq(DevicePO::getDeviceToken, devToken);
        DevicePO device = this.getOne(wrapper);
        return device;
    }
}
